/**
 * 常用验证工具函数
 */

/**
 * 判断值是否为空
 * @param value 要判断的值
 * @returns boolean
 */
export function isEmpty(value: unknown): boolean {
  if (value === null || value === undefined) {
    return true
  }
  if (typeof value === 'string' && value.trim() === '') {
    return true
  }
  if (Array.isArray(value) && value.length === 0) {
    return true
  }
  if (value instanceof Object && Object.keys(value).length === 0) {
    return true
  }
  return false
}

/**
 * 判断是否为数字
 * @param value 要判断的值
 * @returns boolean
 */
export function isNumber(value: unknown): boolean {
  return typeof value === 'number' && !Number.isNaN(value)
}

/**
 * 判断是否为对象
 * @param value 要判断的值
 * @returns boolean
 */
export function isObject(value: unknown): boolean {
  return value !== null && typeof value === 'object' && !Array.isArray(value)
}

/**
 * 判断是否为数组
 * @param value 要判断的值
 * @returns boolean
 */
export function isArray(value: unknown): boolean {
  return Array.isArray(value)
}

/**
 * 判断是否为手机号
 * @param value 要判断的值
 * @returns boolean
 */
export function isPhoneNumber(value: string): boolean {
  return /^1[3-9]\d{9}$/.test(value)
}

/**
 * 判断是否为邮箱
 * @param value 要判断的值
 * @returns boolean
 */
export function isEmail(value: string): boolean {
  return /^[\w.%+-]+@[a-z0-9.-]+\.[a-z]{2,}$/i.test(value)
}

/**
 * 判断是否为0
 * @param value 要判断的值
 * @returns boolean
 */
export function isZero(value: unknown): boolean {
  return value === 0 || value === '0'
}
